基于 TensorFlow 的第一个神经网络
代码参考《TensorFlow:实战Google深度学习框架》,本地手打,调试后复制出来,和原文会有差别。
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf from numpy.random import RandomState batch_size=8 w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) x=tf.placeholder(tf.float32,shape=(None,2),name='x-input') y_=tf.placeholder(tf.float32,shape=(None,1),name="y-input") a=tf.matmul(x,w1) y=tf.matmul(a,w2) cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0))) train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy) rdm=RandomState(1) dataset_size=128 X=rdm.rand(dataset_size,2) print X Y=[[int(x1+x2<1)] for (x1,x2) in X] print Y with tf.Session() as sess: init_op=tf.initialize_all_variables() sess.run(init_op) print sess.run(w1) print sess.run(w2) STEPS=5000 for i in range(STEPS): start=(i*batch_size)%dataset_size end=min(start+batch_size,dataset_size) sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]}) if(i%1000==0): total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y}) print("After %d training step,cross entrypy on all data is %g"%(i,total_cross_entropy)) print sess.run(w1) print sess.run(w2)
基于 TensorFlow 的第一个神经网络,可以看到 w1,w2 对应的变化。
输出:
[[-0.81131822 1.48459876 0.06532937]
[-2.44270396 0.0992484 0.59122431]]
[[-0.81131822]
[ 1.48459876]
[ 0.06532937]]
After 0 training step,cross entrypy on all data is 0.0674925
After 1000 training step,cross entrypy on all data is 0.0163385
After 2000 training step,cross entrypy on all data is 0.00907547
After 3000 training step,cross entrypy on all data is 0.00714436
After 4000 training step,cross entrypy on all data is 0.00578471
[[-1.9618274 2.58235407 1.68203783]
[-3.4681716 1.06982327 2.11788988]]
[[-1.8247149 ]
[ 2.68546653]
[ 1.41819501]]